﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//联合体（共用体）:成员变量共用一片内存空间
union Un
{
	char a;
	int b;
};
union Un u1;
int main()
{
	printf("%zu\n", sizeof(union Un));//4
	return 0;
}

union U
{
	int a;
	int b;
};
union U x;
int main()
{
	printf("%p\n", &x );
	printf("%p\n", &x.a);
	printf("%p\n", &x.b);//共用一片内存空间，所以三个结果一样
	return 0;
}

union M
{
	char x;
	int y;
};
int main()
{
	union M z = { 0 };
	z.y = 0x11223344;
	z.x = 0x55;//共用一片内存空间，当给x赋值时，y的值也改变。
	printf("%#x", z.y);//结果为：0x11223355(VS为小端存储，所以修改了44)
	return 0;
}

//联合体⼤⼩的计算
//•联合的⼤⼩⾄少是最⼤成员的⼤⼩。
//•当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候，就要对⻬到最⼤对⻬数的整数倍。

union Un
{
	char arr[5];
	int a;
};
int main()
{
	printf("%zu\n", sizeof(union Un));//8
	return 0;
}

//判断大小端
int check()
{
	union U
	{
		char a;
		int b;
	};
	union U u;
	u.b = 1;
	return u.a;
}
int main()
{
	int x = check();
	if (x == 1)
		printf("小端\n");
	else
		printf("大端\n");
	return 0;
}
